package com.meth;

import java.time.LocalDateTime;
import java.util.Scanner;

import com.dbMethod.*;
import sun.security.util.Password;

public class method {
    //定义变量
    private static final Scanner sc = new Scanner(System.in);
    private static final String   tradeTypeDeposit="存款业务";
    private static final String   tradeTypeWithdraw="取款业务";



    /**
     * 查询账户余额
     * @param CardId 卡号
     */

    public static void query_Money(String CardId) {
        int accountMoney = sql_QueryMoney.QueryMoney(CardId);
        System.out.println("当前账户余额 "+accountMoney);

    }

    /**
     * 取款业务
     * @param CardId  卡号
     */

    public static void withdraw_Money(String CardId) {
        //如果要取钱,要先看当前的账户余额有多少,调用sql_QueryMoney来查看
        int accountMoney = sql_QueryMoney.QueryMoney(CardId);
        System.out.println("请输入要取款的数目,金额为100的倍数，总额不超过5000元");
        int withdrawMoney = sc.nextInt();

        while (withdrawMoney*100 > accountMoney || withdrawMoney > 50){
            System.out.println("取款金额透支或取款总额超过5000元，请重新输入要取款的数目");
            withdrawMoney = sc.nextInt();
        }

        LocalDateTime transDate = LocalDateTime.now();
        sql_UpdateWithdraw.UpdateWithdraw(CardId,tradeTypeWithdraw,transDate,withdrawMoney*100);


    }

    /**
     *存款业务
     * @param CardId 卡号
     */
    public static void deposit_Money(String CardId) {
        int deositMoney;
        System.out.println("请输入要存放的金额");
        deositMoney = sc.nextInt();
        LocalDateTime transDate = LocalDateTime.now();
        sql_UpdateDeposit.UpdateDeposit(CardId,tradeTypeDeposit,transDate,deositMoney);

    }


    /**
     *
     * @param CardId 卡号
     * @param Password 密码
     */

    public static boolean InsertUser(String CardId,  int Password) {
        LocalDateTime transDate = LocalDateTime.now();
       if (sql_InsertUser.InsertUser(CardId,Password,transDate)==1){
           System.out.println("成功添加账户");
           return true;
       }
       else{
           System.out.println("添加账户失败,请重现添加用户");
           return false;
       }

    }



    /**
     *修改密码
     * @param CardId 卡号
     */
    public static void change_Password(String CardId) {
        //总while循环的控制
        boolean flag = true;
        //获取旧密码
        int dataBasePasswordOfUser = sql_GetPassword.GetPassword(CardId);
        //定义旧密码,新密码第一次读取,新密码第二次读取
        int oldPassword;
        int firstPassword=0;
        int secondPassword=0;
        while (flag){
            System.out.println("请输入旧密码");
            oldPassword= sc.nextInt();
            //校验旧密码
            if (oldPassword == dataBasePasswordOfUser){

                while (true){
                    System.out.println("请输入第一次密码");
                    firstPassword=sc.nextInt();
                    System.out.println("请输入第二次密码");
                    secondPassword=sc.nextInt();
                    //对二次密码的长度处理
                    String firstPassword1=firstPassword+"";
                    int passwordLength=firstPassword1.length();
                    if (    firstPassword==secondPassword && passwordLength>=6 &&
                            isAllCharactersSame(firstPassword1) ) {
                        //检验通过,长度不小于6,两次密码一致,不存在密码完全相同的情况
                        break;
                    }
                    System.out.println("长度小于6或两次密码不一致或存在密码完全相同的情况,请重新输入密码");

                }
                //修改密码

                int i = sql_AlterPassword.AlterPassword(firstPassword, CardId); //返回受影响的行
                if (i == 1){
                    flag=false;
                    System.out.println("修改成功");
                }

            }else {
                System.out.println("原密码错误,请校验");
            }



        }



    }

    /**
     * 账户登入检验
     * @param CardId 卡号
     * @param password 密码
     * @return 检验成功返回true,否则返回false
     */
    public static boolean check_Login(String  CardId,int password) {
        return sql_LoginCheck.LoginCheck(CardId,password);
    }

    /**
     * 对新密码不能出现完全一致的检验
     * @param password 密码
     * @return 发现不同的字符，返回 false，否则返回true
     */

    public static boolean isAllCharactersSame(String password) {
        if (password == null || password.isEmpty()) {
            return false; // 可以根据需要处理空密码的情况
        }

        // 获取第一个字符
        char firstChar = password.charAt(0);

        // 遍历字符串，检查是否所有字符都与第一个字符相同
        for (char ch : password.toCharArray()) {
            if (ch != firstChar) {
                return true; // 一旦发现不同的字符，返回 true
            }
        }

        // 所有字符都相同
        return false;
    }

}
